/* 
 * This program is free software; you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 2, or (at your option) 
 * any later version. 
 * 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 
 * 02111-1307, USA. 
 * 
 * http://www.gnu.org/copyleft/gpl.html 
 */ 
package l1j.server.server.model.gametime; 

import java.util.logging.Logger; 

import l1j.server.server.datatables.NightSpawnTable;
import l1j.server.server.datatables.NpcTable; 
import l1j.server.server.model.L1Object; 
import l1j.server.server.model.L1World; 
import l1j.server.server.model.Instance.L1FieldObjectInstance; 
import l1j.server.server.model.gametime.L1GameTimeClock; 

public class NightTimeController implements Runnable { 
   private static Logger _log = Logger.getLogger(NightTimeController.class 
         .getName()); 

   private static NightTimeController _instance; 

   private boolean isSpawn = false; 

   public static NightTimeController getInstance() { 
      if (_instance == null) { 
         _instance = new NightTimeController(); 
      } 
      return _instance; 
   } 

   @Override 
   public void run() { 
      try { 
         while (true) { 
            checkNightTime(); 
            Thread.sleep(60000); // 60
         } 
      } catch (Exception e1) { 
      } 
   } 

   private void checkNightTime() { 
      int servertime = L1GameTimeClock.getInstance().getGameTime().getSeconds(); 
      int nowtime = servertime % 86400; 
      if (nowtime >= ((5 * 3600) + 3300) && nowtime < ((17 * 3600) + 3300)) { // 5:55 ~ 17: 55 
         if (isSpawn) { 
            isSpawn = false; 
            for (L1Object object : L1World.getInstance().getObject()) { 
               if (object instanceof L1FieldObjectInstance) { 
                  L1FieldObjectInstance npc = (L1FieldObjectInstance) object; 
                  if ((npc.getNpcTemplate().get_npcId() == 81106
                	 || npc.getNpcTemplate().get_npcId() == 81160
                     || npc.getNpcTemplate().get_npcId() == 81164
                     || npc.getNpcTemplate().get_npcId() == 81165
                     || npc.getNpcTemplate().get_npcId() == 81166
                     || npc.getNpcTemplate().get_npcId() == 81167 
                	 ||  npc.getNpcTemplate().get_npcId() == 81171
                     || npc.getNpcTemplate().get_npcId() == 81172
                     ||npc.getNpcTemplate().get_npcId() == 81177 
                     || npc.getNpcTemplate().get_npcId() == 81178 
                     || npc.getNpcTemplate().get_npcId() == 81179 
                     || npc.getNpcTemplate().get_npcId() == 81180 
                     || npc.getNpcTemplate().get_npcId() == 81181 
                	  ) 
                     && (npc.getMapId() == 0 || npc.getMapId() == 1  || npc.getMapId() == 2
                     || npc.getMapId() == 3  || npc.getMapId() == 4  || npc.getMapId() == 7
                     || npc.getMapId() == 8  || npc.getMapId() == 9  || npc.getMapId() == 10
                     || npc.getMapId() == 11 || npc.getMapId() == 53 || npc.getMapId() == 54
                     || npc.getMapId() == 55 || npc.getMapId() == 56 || npc.getMapId() == 79 
                     || npc.getMapId() == 80 || npc.getMapId() == 81 || npc.getMapId() == 82 
                     || npc.getMapId() == 85 || npc.getMapId() == 86 || npc.getMapId() == 5140 )) {
                    
                	  npc.deleteMe(); 
                  } 
               } 
            } 
         } 
      } else if ((nowtime >= ((17 * 3600) + 3300) && nowtime <= 24 * 3600) 
         || (nowtime >= 0 * 3600 && nowtime < ((5 * 3600) + 3300))) { // 17:55 ~ 24: 00 || 0:00 ~ 5:55 
         if (!isSpawn) { 
            isSpawn = true; 
            NightSpawnTable.getInstance(); 
         } 
      } 
   } 

}
